home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Input 64
/
Input_64_86-06_1986_Verlag_Heinz_Weise_de.d64
/
experte .lsp
< prev
next >
Wrap
Text File
|
2023-02-26
|
9KB
|
271 lines
(do expr (lambda nil (prog (in
rulesused rule) loop (msg ":_ ") (
setq in (readl)) (cond ((member (car
in) (quote (ok ende fertig))) (return
t)) ((eq (last in) (quote :)) (msg
":+ ") (setq in (append in (readl)))))
(eval (to-do in)) (go loop))))
(remember expr (lambda (new) (cond ((
member new facts) nil) (t (setq facts
(cons new facts)) new))))
(recall expr (lambda (fact) (cond ((
member fact facts) fact))))
(testif expr (lambda (rule) (prog (
ifs) (setq ifs (car rule)) loop (cond
((null ifs) (return t)) ((recall (car
ifs))) (t (return nil))) (setq ifs (
cdr ifs)) (go loop))))
(usethen expr (lambda (rule) (prog (
thens success) (setq thens (cadr rule)
) loop (cond ((null thens) (return
success)) ((remember (car thens)) (
setq success t) (print-rule rule) (
msg t "deduziert " t "--> ") (princ (
car thens)) (terpri))) (setq thens (
cdr thens)) (go loop))))
(tryrule expr (lambda (rule) (cond ((
testif rule) (rememberrule rule) (
usethen rule)))))
(stepforward expr (lambda nil (prog (
rulelist) (setq rulelist rules) loop (
cond ((null rulelist) (return nil)) ((
tryrule (car rulelist)) (return t))) (
setq rulelist (cdr rulelist)) (go
loop))))
(deduce expr (lambda nil (setq
rulesused nil) (prog (progress) loop (
cond ((stepforward) (setq progress t))
(t (return progress))) (go loop))))
(rules value nil)
(facts value nil)
(hyps value nil)
(verify expr (lambda (fact) (prog (
relevant1 relevant2) (cond ((recall
fact) (return t))) (setq relevant1 (
inthen fact rules)) (setq relevant2
relevant1) (cond ((null relevant1) (
cond ((member fact asked) (return nil)
) ((ask fact) (remember fact) (return
t)) (t (setq asked (cons fact asked))
(return nil))))) loop1 (cond ((null
relevant1) (go loop2)) ((tryrule (car
relevant1)) (return t))) (setq
relevant1 (cdr relevant1)) (go loop1)
loop2 (cond ((null relevant2) (go
exit)) ((tryrule+ (car relevant2)) (
return t))) (setq relevant2 (cdr
relevant2)) (go loop2) exit (return
nil))))
(tryrule+ expr (lambda (rule) (cond ((
testif+ rule) (rememberrule rule) (
usethen rule)))))
(testif+ expr (lambda (rule) (prog (
ifs) (setq ifs (car rule)) loop (cond
((null ifs) (return t)) ((verify (car
ifs))) (t (return nil))) (setq ifs (
cdr ifs)) (go loop))))
(inif expr (lambda (fact r) (mapcan (
quote (lambda (x) (cond ((member fact
(car x)) (list x))))) r)))
(inthen expr (lambda (fact r) (mapcan
(quote (lambda (x) (cond ((member
fact (cadr x)) (list x))))) r)))
(diagnose expr (lambda nil (setq
rulesused nil) (prog (asked pos) (
setq pos hyps) loop (cond ((null pos)
(msg t
"keine hypothese kann bewiesen werden"
t) (return nil)) ((verify (car pos))
(msg t "die hypothese :" t "--> ") (
princ (car pos)) (msg t "ist wahr" t)
(return (car pos)))) (msg t
"die hypothese :" t "--> ") (princ (
car pos)) (msg t
"kann nicht bewiesen werden" t) (setq
pos (cdr pos)) (go loop))))
(data value (rules facts hyps))
(ask expr (lambda (s) (msg t
"ist dies wahr (j/n/w) :" t) (princ s)
(setq ch (waitchar)) (msg t ch t) (
cond ((eq ch "j") t) ((eq ch "n") f) (
t (tellwhy) (ask s)))))
(tellwhy expr (lambda nil (msg t
"ich versuche zu beweisen :" t) (
princ (car pos)) (msg t t
"ich teste :" t) (print-rule rule)))
(print-facts expr (lambda nil (cond (
facts (prlist facts)) (t (msg
"es sind keine fakten vorhanden!" t)))
))
(print-hyps expr (lambda nil (cond (
hyps (prlist hyps)) (t (msg
"noch wurde keine hypothese aufgestellt!"
t)))))
(print-rules expr (lambda nil (cond (
rules (mapc (quote print-rule) rules))
(t (msg "bitte regeln eingeben!" t)))
))
(print-rule expr (lambda (r) (msg t
"+++ regel " (car (cddr r)) " +++" t)
(print-if (car r)) (print-then (cadr
r))))
(prlist expr (lambda (l) (mapc (quote
(lambda (x) (princ x) (terpri))) l)))
(print-rule-n expr (lambda (n) (cond (
(setq x (get-rule-n n rules)) (
print-rule x)) (t (msg
"es gibt noch keine regel " n t)))))
(get-rule-n expr (lambda (n r) (prog
nil loop (cond ((null r) (return nil))
((eq n (car (cddr (car r)))) (return
(car r)))) (setq r (cdr r)) (go loop))
))
(print-if expr (lambda (ifs) (princ (
cons (quote wenn) (cons (quote :) (
car ifs)))) (terpri) (mapc (quote (
lambda (x) (princ (append (quote (und
wenn :)) x)) (terpri))) (cdr ifs))))
(print-then expr (lambda (thens) (
princ (cons (quote dann) (cons (quote
:) (car thens)))) (terpri) (mapc (
quote (lambda (x) (princ (append (
quote (und dann :)) x)) (terpri))) (
cdr thens))))
(forget-fact fexpr (nlambda l (setq
facts (remove l facts))))
(forget-hyp fexpr (nlambda l (setq
hyps (remove l hyps))))
(forget-facts expr (lambda nil (setq
facts nil)))
(forget-hyps expr (lambda nil (setq
hyps nil)))
(forget-rules expr (lambda nil (setq
rules nil) (setq rule nil)))
(forget-rule expr (lambda (n) (setq
rules (remove (get-rule-n n rules)
rules))))
(change-rule)
(what? expr (lambda nil (msg
"was soll ich tun ?" t)))
(how fexpr (nlambda fact (cond ((setq
x (inthen fact rulesused)) (msg
"mit den fakten :" t) (mapc (quote (
lambda (y) (prlist (car y)))) x)) ((
member fact facts) (msg
"das faktum war gegeben" t)) (t (msg
"das habe ich nicht deduziert" t)))))
(why fexpr (nlambda fact (cond ((
member fact hyps) (msg
"es war eine der hypothesen" t)) ((
setq x (inif fact rulesused)) (msg
"es folgt daraus :" t) (mapc (quote (
lambda (y) (prlist (cadr y)))) x)) (t
(msg "das habe ich nicht benutzt" t)))
))
(which fexpr (nlambda nil (cond ((
null rulesused) (msg "keine" t)) (t (
msg "die regeln ") (princ (mapcar (
quote last) rulesused)) (terpri)))))
(rememberrule expr (lambda (rule) (
cond ((not (member rule rulesused)) (
setq rulesused (cons rule rulesused)))
)))
(rules-with-if fexpr (nlambda l (mapc
(quote print-rule) (inif l rules))))
(rules-with-then fexpr (nlambda l (
mapc (quote print-rule) (inthen l
rules))))
(used-rule expr (lambda (n) (cond ((
setq x (get-rule-n n rulesused)) (msg
"ja:" t) (print-rule x)) (t (msg
"nein" t)))))
(add-fact fexpr (nlambda l (cond ((
null facts) (setq facts (list l))) ((
member l facts)) (t (nconc1 facts l)))
))
(add-hyp fexpr (nlambda l (cond ((
null hyps) (setq hyps (list l))) ((
member l hyps)) (t (nconc1 hyps l)))))
(if fexpr (nlambda l (msg "regel " (
add1 (length rules)) t) (setq rule (
list (list l) nil (add1 (length rules)
))) (cond (rules (nconc1 rules rule))
(t (setq rules (list rule))))))
(andif fexpr (nlambda l (nconc1 (car
rule) l)))
(then fexpr (nlambda l (setq
then-fact l) (rplaca (cdr rule) (list
l))))
(is-hyp expr (lambda nil (cond (
then-fact (apply (quote add-hyp)
then-fact)))))
(andthen fexpr (nlambda l (setq
then-fact l) (nconc1 (cadr rule) l)))
(to-do expr (lambda (s) (prog (sent) (
setq sent diareg) loop (cond ((null
sent) (return (list (quote what?)))) (
(match (caar sent) s) (return (
do-func (cdar sent) s)))) (setq sent (
cdr sent)) (go loop))))
(do-func expr (lambda (func s) (cons (
car func) (cond ((cdr (member (quote
:) s))) ((in-expr s))))))
(do-lisp fexpr (nlambda (l) (print (
eval l))))
(in-expr expr (lambda (l) (cond ((
atom l) nil) ((or (numberp (car l)) (
consp (car l))) (list (car l))) (t (
in-expr (cdr l))))))
(match expr (lambda (p s) (cond ((
null p) (or (null s) (eq (car s) (
quote :)))) ((eq (car p) (quote *)) (
cond ((or (null s) (eq (car s) (quote
:))) (null (cdr p))) ((match (cdr p)
s)) ((match p (cdr s))))) ((null s)
nil) ((eq (car p) (car s)) (match (
cdr p) (cdr s))) ((and (consp (car p))
(member (car s) (car p))) (match (
cdr p) (cdr s))))))
(diareg value (((wenn).if) ((und dann)
.andthen) ((dann).then) ((und *).
andif) ((als *).is-hyp) (((drucke
zeige d) * (regeln r)).print-rules) ((
(drucke zeige d) * (fakten f)).
print-facts) (((drucke zeige d) * (
hypothesen h)).print-hyps) (((drucke
zeige d) * regel *).print-rule-n) (((
vergiss loesche v) * (fakten f)).
forget-facts) (((vergiss loesche v) *
(hypothesen h)).forget-hyps) (((
vergiss loesche v) * (regeln r)).
forget-rules) (((vergiss loesche v) *
faktum).forget-fact) (((vergiss
loesche v) * (hypothese hyp)).
forget-hyp) (((vergiss loesche v) *
regel *).forget-rule) ((wie *).how) ((
welche *).which) ((warum *).why) ((* (
faktum lerne merke l m) *).add-fact) (
(* (hypothese hyp) *).add-hyp) ((*
diagnose *).diagnose) ((* (deduziere
deduzieren deduktion) *).deduce) ((* (
konklusion k) *).rules-with-then) ((*
(praemisse p) *).rules-with-if) ((* (
angewendet benutzt a) *).used-rule) ((
* lisp *).do-lisp)))
(expfns value (do remember recall
testif usethen tryrule stepforward
deduce rules facts hyps verify
tryrule+ testif+ inif inthen diagnose
data ask tellwhy print-facts
print-hyps print-rules print-rule
prlist print-rule-n get-rule-n
print-if print-then forget-fact
forget-hyp forget-facts forget-hyps
forget-rules forget-rule change-rule
what? how why which rememberrule
rules-with-if rules-with-then
used-rule add-fact add-hyp if andif
then is-hyp andthen to-do do-func
do-lisp in-expr match diareg expfns))
nil